package br.com.po1.avaliacao01;

import java.awt.TextArea;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.TimeUnit;

import javax.swing.JOptionPane;

public class Estacionamento {
	private ArrayList<Veiculo> veiculosEstacionados = new ArrayList<Veiculo>();
	private ArrayList<Veiculo> veiculosCadastrados = new ArrayList<Veiculo>();
	
	public void cadastrarEntrada(){
		String placa = null;
		Veiculo vc = new Veiculo();
		do{
			vc.setPlaca(helper.Helper.lerDados("Placa"));
		}while(hasPlaca(vc.getPlaca()));
		vc.cadastrar();
		veiculosEstacionados.add(vc);
	}
	public boolean hasPlaca(String placa){
		for(Veiculo veiculos : veiculosEstacionados){
			if(veiculos.getPlaca().equals(placa)){
				return true;
			}
		}
		return false;
	}
	public void cadastrarSaida(String placa){
		/*NA SAÃ�DA DEVE SER CALCULADO O VALOR A SER PAGO PELO CLIENTE.*/
		if(!hasPlaca(placa)){
			helper.Helper.escreverDados("Veiculo não encontrado");
			return;
		}
		for(Veiculo veiculos : veiculosEstacionados){
			if(veiculos.getPlaca().equals(placa)){
				veiculos.setDataSaida(Calendar.getInstance());
				long entrada = veiculos.getDataEntrada().getTimeInMillis();
				long saida = veiculos.getDataSaida().getTimeInMillis();
				long totalinMilis = saida - entrada;
				totalinMilis = TimeUnit.MILLISECONDS.toHours(totalinMilis);
				long totalAPagar = 0;
				if(veiculos.getTipo().equalsIgnoreCase(Veiculo.tipos[0])){
					totalAPagar = totalinMilis * 5;
				}else if(veiculos.getTipo().equalsIgnoreCase(Veiculo.tipos[1])){
					totalAPagar = totalinMilis * 2;
				}else if(veiculos.getTipo().equalsIgnoreCase(Veiculo.tipos[2])){
					totalAPagar = totalinMilis * 10;
				}else if(veiculos.getTipo().equalsIgnoreCase(Veiculo.tipos[3])){
					totalAPagar = totalinMilis * 15;
				}
				helper.Helper.escreverDados("Tota a pagar é " + totalAPagar);
				veiculosEstacionados.remove(veiculos);
				veiculosCadastrados.add(veiculos);
				return;
			}
		}
	}
	public void alterar(String placa, int tipo){
		for(Veiculo veiculos : veiculosEstacionados){
			if(veiculos.getPlaca().equals(placa)){
				switch (tipo) {
				case 1:
					veiculos.setModelo(helper.Helper.lerDados("Digite o novo modelo"));
					break;
				case 2:
					veiculos.setPlaca(helper.Helper.lerDados("Digite a placa"));
					break;
				case 3:
					veiculos.setMarca(helper.Helper.lerDados("Digite a nova marca"));
					break;
				case 4:
					veiculos.setNomeProprietario(helper.Helper.lerDados("Digite o novo proprietario"));
					break;
				case 5:
					veiculos.setTipo(helper.Helper.lerDados("Escolha o tipo", "Alterar", JOptionPane.QUESTION_MESSAGE, Veiculo.tipos, Veiculo.tipos[0]));
					break;
				default:
					break;
				}
			}
		}
	}
	public void listar(){
		/*Lista todos os veiculos no estacionamento*/
		TextArea area = new TextArea();
		StringBuilder stb = new StringBuilder();
		for(Veiculo veiculos : veiculosEstacionados){
			stb.append("Proprietario: " + veiculos.getNomeProprietario());
			stb.append("\nModelo: " + veiculos.getModelo());
			stb.append("\nMarca: " + veiculos.getMarca());
			stb.append("\nPlaca: " + veiculos.getPlaca());
			stb.append("\nTipo do veiculo: " + veiculos.getTipo() + "\n");
			stb.append("\nData de entrada: " + helper.Helper.formatarData(veiculos.getDataEntrada().getTime(), "dd/MM/yyyy") + " " + helper.Helper.formatarData(veiculos.getDataEntrada().getTime(), "HH:mm:ss"));
		}
		area.setText(stb.toString());
		area.setEditable(false);
		helper.Helper.escreverDados(area);
	}
	public void consultarPlaca(String placa){
		if(!hasPlaca(placa)){
			helper.Helper.escreverDados("Veiculo não encontrado");
			return;
		}
		TextArea area = new TextArea();
		StringBuilder stb = new StringBuilder();
		for(Veiculo veiculos : veiculosEstacionados){
			if(veiculos.getPlaca().equals(placa)){
				stb.append("Modelo: " + veiculos.getModelo());
				stb.append("\nMarca: " + veiculos.getMarca());
				stb.append("\nPlaca: " + veiculos.getPlaca());
				stb.append("\nProprietario: " + veiculos.getNomeProprietario());
				stb.append("\nTipo do veiculo: " + veiculos.getTipo());
				stb.append("\nData de entrada: " +  helper.Helper.formatarData(veiculos.getDataEntrada().getTime(), "dd/MM/yyyy") + " " + helper.Helper.formatarData(veiculos.getDataEntrada().getTime(), "HH:mm:ss"));
				area.setText(stb.toString());
				area.setEditable(false);
				helper.Helper.escreverDados(area);
				return;
			}
		}
		
	}
	public void consultarPoprietario(String nomeProprietario){
		
		TextArea area = new TextArea();
		StringBuilder stb = new StringBuilder();
		for(Veiculo veiculos : veiculosEstacionados){
			if(veiculos.getNomeProprietario().equalsIgnoreCase(nomeProprietario)){
				stb.append("Modelo: " + veiculos.getModelo());
				stb.append("\nMarca: " + veiculos.getMarca());
				stb.append("\nPlaca: " + veiculos.getPlaca());
				stb.append("\nProprietario: " + veiculos.getNomeProprietario());
				stb.append("\nTipo do veiculo: " + veiculos.getTipo());
				stb.append("\nData de entrada: " +  helper.Helper.formatarData(veiculos.getDataEntrada().getTime(), "dd/MM/yyyy") + " " + helper.Helper.formatarData(veiculos.getDataEntrada().getTime(), "HH:mm:ss"));
				area.setText(stb.toString());
				area.setEditable(false);
				helper.Helper.escreverDados(area);
				return;
			}
		}
		helper.Helper.escreverDados("Veiculo não encontrado");
	}
	public void consultarDataEntrada(String dataEntrada, String time){
		TextArea area = new TextArea();
		StringBuilder stb = new StringBuilder();
		for(Veiculo veiculos : veiculosEstacionados){
			if(helper.Helper.calendarToString(veiculos.getDataEntrada(), "dd/MM/yyyy").equals(dataEntrada) &&
				helper.Helper.formatarData(veiculos.getDataEntrada().getTime(), "HH:mm").equals(time)){
				stb.append("Modelo: " + veiculos.getModelo());
				stb.append("\nMarca: " + veiculos.getMarca());
				stb.append("\nPlaca: " + veiculos.getPlaca());
				stb.append("\nProprietario: " + veiculos.getNomeProprietario());
				stb.append("\nTipo do veiculo: " + veiculos.getTipo());
				stb.append("\nData de entrada: " +  helper.Helper.formatarData(veiculos.getDataEntrada().getTime(), "dd/MM/yyyy") + " " + helper.Helper.formatarData(veiculos.getDataEntrada().getTime(), "HH:mm:ss"));
				area.setText(stb.toString());
				area.setEditable(false);
				helper.Helper.escreverDados(area);
				return;
			}
		}
	}
	public void consultarDataSaida(String dataSaida, String time){
		TextArea area = new TextArea();
		StringBuilder stb = new StringBuilder();
		for(Veiculo veiculos : veiculosCadastrados){
			if(helper.Helper.calendarToString(veiculos.getDataSaida(), "dd/MM/yyyy").equals(dataSaida) &&
				helper.Helper.formatarData(veiculos.getDataEntrada().getTime(), "HH:mm").equals(time)){
				stb.append("Modelo: " + veiculos.getModelo());
				stb.append("\nMarca: " + veiculos.getMarca());
				stb.append("\nPlaca: " + veiculos.getPlaca());
				stb.append("\nProprietario: " + veiculos.getNomeProprietario());
				stb.append("\nTipo do veiculo: " + veiculos.getTipo());
				stb.append("\nData de entrada: " +  helper.Helper.formatarData(veiculos.getDataEntrada().getTime(), "dd/MM/yyyy") + " " + helper.Helper.formatarData(veiculos.getDataEntrada().getTime(), "HH:mm:ss"));
				stb.append("\nData de saida: " + helper.Helper.formatarData(veiculos.getDataSaida().getTime(), "dd/MM/yyyy") + " " + helper.Helper.formatarData(veiculos.getDataSaida().getTime(), "HH:mm:ss"));
				area.setText(stb.toString());
				area.setEditable(false);
				helper.Helper.escreverDados(area);
				return;
			}
		}
	}
	/*Getters and setters*/
	public ArrayList<Veiculo> getVeiculosCadastrados() {
		return veiculosEstacionados;
	}
	public void setVeiculosCadastrados(ArrayList<Veiculo> veiculosCadastrados) {
		this.veiculosEstacionados = veiculosCadastrados;
	}
	
	
}
